home *** CD-ROM | disk | FTP | other *** search
/ Pascal Super Library / Pascal Super Library (CW International)(1997).bin / MENU_UTL / PULL70B / PULLSTAT.PAS < prev    next >
Pascal/Delphi Source File  |  1993-09-24  |  30KB  |  754 lines

  1. { ========================================================================== }
  2. { PullStat.pas - User Statistics for pull-down menus.     var 7.0b, 09-24-93 }
  3. {                                                                            }
  4. { This file contains all the data for GetUserPullStats, GetOverrideStats and }
  5. { CheckGlobalKeys to configure the menus.                                    }
  6. {   Copyright (c) 1988,1993 James H. LeMay, All rights reserved.             }
  7. { ========================================================================== }
  8.  
  9. {$i pulldefs.inc }
  10.  
  11. UNIT PullStat;
  12.  
  13. INTERFACE
  14.  
  15. { ------------------ Set up your window names here in order: --------------- }
  16. { This is optional, but it sure helps you in not only understanding the
  17.   program, but also makes it unquestionably easier to rearrange.             }
  18.  
  19. type
  20.   MainMenuNames = (NoMainMenu,FilesMenu,ColorMenu,AutoPartsMenu,EnterDataMenu,
  21.                    OptionsMenu,UtilitiesMenu,IRSmenu,QuitMenu);
  22.  
  23.   {$ifdef UseSubMenuCode }
  24.   SubMenuNames  = (NoSubMenu,TiresMenu,RadioMenu,UpdateMenu,DateMenu,
  25.                    BrandsMenu);
  26.   {$endif }
  27.  
  28.   {$ifdef UseDataEntryCode }
  29.   DataWndwNames = (NoDW,BytesDW,WordsDW,IntegersDW,LongIntsDW,RealsDW,HexDW,
  30.                    CharsDW,StringsDW,PathDW,FileMaskDW,SeatsDW,PriceDW,
  31.                    MonthDW,DayDW,YearDW,YearsDW);
  32.   {$endif }
  33.  
  34.   {$ifdef UseHelpWndwCode }
  35.   HelpWndwNames = (NoHW,WorkWndwHW,TopLineHW,FilesMenuHW,DirMenuHW,
  36.                    BrandsMenuHW,EnterDataMenuHW,IRSmenuHW,DateMenuHW,
  37.                    UpdateMenuHW,ExecChoiceHW,SingleChoiceHW,MultipleChoiceHW,
  38.                    NumericHW,TextHW);
  39.   HelpLineNames = (NoHL,               { HL - HelpLine;  L  - Last }
  40.                    HLw1,HLw2,HLw3,HLw4,HLw5,HLw6, { Work window }
  41.                    HLw7,HLw8,HLw9,HLw10,HLw11,HLwL,
  42.                    HLt1,HLtL,                     { Top menu }
  43.                    HLb1,HLb2,HLb3,HLb4,HLb5,HLbL, { Brands submenu }
  44.                    HLf1,HLf2,HLf3,HLf4,HLf5,      { Files submenu }
  45.                    HLf6,HLf7,HLf8,HLf9,HLf10,HLfL,
  46.                    HLdir1,HLdir2,HLdir3,HLdir4,HLdir5,  { Directory submenu }
  47.                    HLdir6,HLdir7,HLdir8,HLdir9,HLdirL,
  48.                    HLe1,HLe2,HLe3,HLe4,HLe5,      { Enter data submenu }
  49.                    HLe6,HLe7,HLe8,HLe9,HLe10,
  50.                    HLe11,HLe12,HLe13,HLe14,HLeL,
  51.                    HLi1,HLi2,HLiL,                { IRS menu }
  52.                    HLd1,HLd2,HLd3,HLdL,           { Date submenu }
  53.                    HLu1,HLu2,HLuL,                { Update submenu }
  54.                    HLx1,HLx2,HLxL,                { eXecute choice menu }
  55.                    HLs1,HLs2,HLsL,                { Single choice menu }
  56.                    HLm1,HLm2,HLmL,                { Multiple choice menu }
  57.                    HLn1,HLn2,HLn3,HLn4,HLn5,HLn6,HLnL,       { Numeric data }
  58.                    HLtx1,HLtx2,HLtx3,HLtx4,HLtx5,HLtx6,HLtxL);  { Text data }
  59.   {$endif UseHelpWndwCode }
  60.  
  61.   {$ifdef UseMsgLineCode }
  62.   MsgLineNames = (NoML,WorkML,TopML,AltML,MainML,SubML,DW_ML,DE_ML,
  63.                   SeqML,HelpML,ProcML,DirML);
  64.   {$endif UseMsgLineCode }
  65.  
  66. const
  67.   FileName: string[12] = 'pulldemo.exe';
  68.  
  69. { Careful! - Always test your last main menu, submenu, data window, and help
  70.   window for run-time error!  It makes sure you have allotted enough memory
  71.   with your constants.  The compiler cannot check it with these typed
  72.   scalars. }
  73.  
  74. procedure GetUserPullStats;
  75. procedure GetOverrideStats;
  76. procedure CheckGlobalKeys;
  77.  
  78.  
  79. IMPLEMENTATION
  80.  
  81. uses
  82.   Crt,Qwik,Wutil,Wndw,Pull,PullDir;
  83.  
  84. procedure GetMainMenu (Name: MainMenuNames);
  85. begin
  86.   MRI := ord (Name);
  87.   TopMenu := MainMenu^[MRI];
  88. end;
  89.  
  90. procedure SaveMainMenu;
  91. begin
  92.   MainMenu^[MRI] := TopMenu;
  93. end;
  94.  
  95. {$ifdef UseSubMenuCode }
  96. procedure GetSubMenu (Name: SubMenuNames);
  97. begin
  98.   MRI := ord (Name);
  99.   TopMenu := SubMenu^ [MRI];
  100. end;
  101.  
  102. procedure SaveSubMenu;
  103. begin
  104.   SubMenu^[MRI] := TopMenu;
  105. end;
  106. {$endif }
  107.  
  108. {$ifdef UseHelpWndwCode }
  109. procedure SetHelpLines (Name: HelpWndwNames; First,Last: HelpLineNames);
  110. begin
  111.   HelpWndw[ord(Name)].FirstLine := ord(First);
  112.   HelpWndw[ord(Name)].LastLine  := ord(Last);
  113. end;
  114. {$endif }
  115.  
  116. { =========================== EXEC PROCEDURES ============================== }
  117. { Place procedures for execution by menu pointers, ProcPtr, here.            }
  118. { They MUST be set to FAR calls.                                             }
  119. { -------------------------------------------------------------------------- }
  120.  
  121. procedure DummyProc; far;
  122. begin
  123.   {$ifdef UseMsgLineCode }
  124.   ShowMsg (ord(ProcML));
  125.   {$endif UseMsgLineCode }
  126.   Delay (1000)
  127. end;
  128.  
  129. procedure GotoDir; far;
  130. begin
  131.   PullDown:=true;
  132.   MoreCmdSeq:='D';
  133. end;
  134.  
  135. procedure DoDir; far;
  136. begin
  137.   { Use (FileName,FileName) to initially Hilite a close match. }
  138.   { Use (FileName,'') to start at default. }
  139.   PullDirectory (FileName,FileName);
  140. end;
  141.  
  142. procedure SetQuit; far;
  143. begin
  144.   PopToWorkWndw := true;
  145.   Quit := true;
  146. end;
  147.  
  148. procedure ProcessThenPop; far;
  149. begin
  150.   { Here's how to process and then pop the menus. }
  151.   DummyProc;
  152.   PopToWorkWndw := true;
  153. end;
  154.  
  155. procedure PopThenProcess; far;
  156. begin
  157.   { Here's how to pop first and then process. }
  158.   if Popped then DummyProc;
  159. end;
  160.  
  161. procedure PopProcessAndPull; far;
  162. begin
  163.   { Here's how to pop the menus first, process and then pull the same }
  164.   { menus back again which is good for updating the work window. }
  165.   if Popped then DummyProc;
  166.   PullDown := true;
  167. end;
  168.  
  169. procedure PopNumOfLevels; far;
  170. begin
  171.   { Here's how to pop by a number of levels so that part of the menus will }
  172.   { remain displayed while going to another submenu. }
  173.   PopLevels  := 1;
  174.   PullDown   := true;
  175.   MoreCmdSeq := 'Y';
  176. end;
  177.  
  178. procedure PopToNewMenu; far;
  179. begin
  180.   { Here's how to go to a completely different menu. }
  181.   PopToTop   := true;
  182.   PullDown   := true;
  183.   MoreCmdSeq := 'AR';
  184. end;
  185.  
  186. procedure DateMenu1; far;
  187. begin
  188.   PullDown   := true;
  189.   MoreCmdSeq := 'D';
  190. end;
  191.  
  192. procedure DateMenu2; far;
  193. begin
  194.   PullDown   := true;
  195.   MoreCmdSeq := 'Y';
  196. end;
  197.  
  198. procedure DateMenu3; far;
  199. begin
  200.   PopLevels := 1;
  201. end;
  202.  
  203. { ======================== GetUserPullStats ================================ }
  204. { The major configurations for all menus go here.  The program first clears  }
  205. { all RECORD values to $00.  The values below will set new values. Therefore,}
  206. { setting RECORD values to "false" or the like is not necessary.             }
  207. { -------------------------------------------------------------------------- }
  208.  
  209. procedure GetUserPullStats;
  210. begin
  211.   DefaultLinkDir := Right; { This is the preferrable location for submenus
  212.                              located relative to the main menu.  Use Right
  213.                              or Left for slide-up or Down for slide under. }
  214.   LocationWarning := true; { If true and a Submenu won't fit, a message is
  215.                              displayed.  If false, you can override the
  216.                              location without the message. }
  217.  
  218.   { ------------------ Set up your colors and borders here: ---------------- }
  219.   TopLineAttr   := Black+LightGrayBG;
  220.   TopLineHattr  := White+BlackBG;
  221.  
  222.   MainMenuBattr := Black+LightGrayBG;
  223.   MainMenuHattr := LightGray+BlackBG;
  224.   MainMenuLattr := White+LightGrayBG;
  225.   MainMenuWattr := Black+LightGrayBG;
  226.   MainMenuCattr := Black+LightGrayBG;
  227.   Brdr[UserBrdr1].BrdrArray := '╒═╕││└─┘╞═╡╤│┴╪';
  228.   MainMenuBrdr  := UserBrdr1;
  229.  
  230.   {$ifdef UseSubMenuCode }
  231.   SubMenuWattr  := Black+CyanBG;
  232.   SubMenuBattr  := Black+CyanBG;
  233.   SubMenuBrdr   := SingleBrdr;
  234.   {$endif UseSubMenuCode }
  235.  
  236.   if VideoMode=7 then
  237.     begin
  238.       TopLineLattr := TopLineAttr;
  239.       {$ifdef UseSubMenuCode }
  240.       SubMenuHattr := Black    +LightGrayBG;
  241.       SubMenuLattr := White    +BlackBG;
  242.       SubMenuCattr := LightGray+BlackBG;
  243.       {$endif UseSubMenuCode }
  244.     end
  245.   else
  246.     begin
  247.       TopLineLattr := Red  +LightGrayBG;
  248.       {$ifdef UseSubMenuCode }
  249.       SubMenuHattr := White+BlueBG;
  250.       SubMenuLattr := White+CyanBG;
  251.       SubMenuCattr := Blue +CyanBG;
  252.       {$endif UseSubMenuCode }
  253.     end;
  254.  
  255.   {$ifdef UseHelpWndwCode }
  256.   HelpWndwWattr := Black+GreenBG;
  257.   HelpWndwBattr := Black+LightGrayBG;
  258.   HelpWndwBrdr  := HdoubleBrdr;
  259.   HelpWndwModes := ZoomMode+ShadowRight+ShadowTrans+CursorOffMode;
  260.   HelpBottomRow := CRTrows-4;
  261.   {$endif UseHelpWndwCode }
  262.  
  263.   {$ifdef UseMsgLineCode }
  264.   MsgLineAttr   := Black+GreenBG;
  265.   MsgLineHattr  := White+GreenBG;
  266.   if QvideoMode=Mono then
  267.        KeyStatusAttr := LightGrayBG
  268.   else KeyStatusAttr := Blue+LightGrayBG;
  269.   ErrMsgAttr    := Yellow+RedBG;
  270.   MsgLineRow    := CRTrows;
  271.   {$endif UseMsgLineCode }
  272.  
  273.  
  274.   { ------------------------- Top Menu defaults ---------------------------- }
  275.   TopLineRow := 2;      { Top line menu to appear on row 2 }
  276.   MPulled    := 3;      { Main menu title to be HiLited when F10 is pressed. }
  277.   MoreCmdSeq := 'ATB';  { Sequence of command letter(s) as if keyed in. }
  278.                         { This will be the default menu(s) pulled. }
  279.   PullDown   := false;  { Set this true if you want the command sequence}
  280.                         {  to pull down the menus at startup. }
  281.  
  282.   { ------------------- Set up your MainMenu records here: ----------------- }
  283.   MainMenuRow := 3;     { First row of Main menus to appear on screen row 3 }
  284.  
  285.   with TopMenu do
  286.   begin
  287.  
  288.     GetMainMenu (FilesMenu);
  289.     MenuMode:=SingleChoice;           SingleFlagLine:=5;
  290.     Title:='~Files';
  291.     Line[1]:='~Path...';              LineMode[1]:=ToDataWndw;
  292.                                       LinkNum [1]:=ord(PathDW);
  293.     Line[2]:='~Mask for directory';   LineMode[2]:=ToDataWndw;
  294.                                       LinkNum [2]:=ord(FileMaskDW);
  295.                                       ProcPtr [2]:=GotoDir;
  296.     Line[3]:='~Directory';            LineMode[3]:=ToUserWndw;
  297.                                       ProcPtr [3]:=DoDir;
  298.     Line[4]:='──────────────────';    LineMode[4]:=Comment;
  299.     Line[5]:='~Split';
  300.     Line[6]:='Make ~backup';
  301.     Line[7]:='Text ~out';
  302.     Line[8]:='';                      LineMode[8]:=Partition;
  303.     Line[9]:='~Help comment';         LineMode[9]:=Comment;
  304.     DefaultLine := 3;
  305.     MsgLineNum  := ord(MainML);
  306.     HelpWndwNum := ord(FilesMenuHW);
  307.     SaveMainMenu;
  308.  
  309.     GetMainMenu (ColorMenu);
  310.     MenuMode:=SingleChoice;           SingleFlagLine:=2;
  311.     Title:='~Color';
  312.     Line[1]:='~Blue';
  313.     Line[2]:='~Green';
  314.     Line[3]:='~Orange';               LineMode[3] := NoChoice;
  315.     Line[4]:='~Yellow';
  316.     Line[5]:='~Red';
  317.     Line[6]:='~Cyan';
  318.     Line[7]:='~Ultraviolet';
  319.     DefaultLine := 5;
  320.     MsgLineNum  := ord(MainML);
  321.     HelpWndwNum := ord(SingleChoiceHW);
  322.     SaveMainMenu;
  323.  
  324.     GetMainMenu (AutoPartsMenu);
  325.     MenuMode:=MultipleChoice;
  326.     Title:='~AutoParts';
  327.     Line[1]:='~Tires';          LineMode[1]:=ToSubMenu;
  328.                                 LinkNum [1]:=ord(TiresMenu);
  329.     Line[2]:='~Radio';          LineMode[2]:=ToSubMenu;
  330.                                 LinkNum [2]:=ord(RadioMenu);
  331.     Line[3]:='~Seats...';       LineMode[3]:=ToDataWndw;
  332.                                 LinkNum [3]:=ord(SeatsDW);
  333.     Line[4]:='~Mirrors';        Flagged[4]:=true;
  334.     Line[5]:='~Locks';
  335.     Line[6]:='~HiBeams';         Flagged[6]:=true;
  336.     Line[7]:='~Wheels';
  337.   { DefaultLine := 1; }       { This is the default }
  338.     MsgLineNum  := ord(MainML);
  339.     HelpWndwNum := ord(MultipleChoiceHW);
  340.     SaveMainMenu;
  341.  
  342.     GetMainMenu (EnterDataMenu);
  343.     MenuMode:=MultipleChoice;
  344.     Title:='~EnterData';
  345.     Line[1]:='~Byte...';        LineMode[1]:=ToDataWndw;
  346.                                 LinkNum [1]:=ord(BytesDW);
  347.     Line[2]:='~Word...';        LineMode[2]:=ToDataWndw;
  348.                                 LinkNum [2]:=ord(WordsDW);
  349.     Line[3]:='~Integer...';     LineMode[3]:=ToDataWndw;
  350.                                 LinkNum [3]:=ord(IntegersDW);
  351.     Line[4]:='~LongInt...';     LineMode[4]:=ToDataWndw;
  352.                                 LinkNum [4]:=ord(LongIntsDW);
  353.     Line[5]:='~Real...';        LineMode[5]:=ToDataWndw;
  354.                                 LinkNum [5]:=ord(RealsDW);
  355.     Line[6]:='~Hex...';         LineMode[6]:=ToDataWndw;
  356.                                 LinkNum [6]:=ord(HexDW);
  357.     Line[7]:='~Character...';   LineMode[7]:=ToDataWndw;
  358.                                 LinkNum [7]:=ord(CharsDW);
  359.     Line[8]:='~String...';      LineMode[8]:=ToDataWndw;
  360.                                 LinkNum [8]:=ord(StringsDW);
  361.     DefaultLine := 2;
  362.     MsgLineNum  := ord(MainML);
  363.     HelpWndwNum := ord(EnterDataMenuHW);
  364.     SaveMainMenu;
  365.  
  366.     GetMainMenu (OptionsMenu);
  367.     MenuMode:=MultipleChoice;
  368.     Title:='~Options';
  369.     Line[1]:='~Dual drive';
  370.     Line[2]:='~Hard disk';      Flagged[2]:=true;
  371.     Line[3]:='~Extended Mem';
  372.     Line[4]:='~CGA';            Flagged[4]:=true;
  373.     Line[5]:='~VGA';
  374.     Line[6]:='~KeyBoard';
  375.     Line[7]:='~Price limit...'; LineMode[7]:=ToDataWndw;
  376.                                 LinkNum [7]:=ord(PriceDW);
  377.     MsgLineNum  := ord(MainML);
  378.     HelpWndwNum := ord(MultipleChoiceHW);
  379.     SaveMainMenu;
  380.  
  381.     GetMainMenu (UtilitiesMenu);
  382.   { MenuMode:=ExecChoice; }     { This is the default }
  383.     Title:='~Utilities';
  384.     Line[1]:='~Copy   files';   ProcPtr[1] := DummyProc;
  385.     Line[2]:='~Delete files';   ProcPtr[2] := DummyProc;
  386.     Line[3]:='~List   file';    ProcPtr[3] := DummyProc;
  387.     Line[4]:='~Edit   file';    ProcPtr[4] := DummyProc;
  388.     Line[5]:='~Find   file';    ProcPtr[5] := DummyProc;
  389.     Line[6]:='~Rename file';    ProcPtr[6] := DummyProc;
  390.     Line[7]:='~Sort   files';   ProcPtr[7] := DummyProc;
  391.     DefaultLine := 2;
  392.     MsgLineNum  := ord(MainML);
  393.     HelpWndwNum := ord(ExecChoiceHW);
  394.     SaveMainMenu;
  395.  
  396.     GetMainMenu (IRSmenu);
  397.   { MenuMode:=ExecChoice; }     { This is the default }
  398.     Title:='~IRSaccounting';
  399.     Line[1]:='~Date';           LineMode[1]:=ToSubMenu;
  400.                                 LinkNum [1]:=ord(DateMenu);
  401.     Line[2]:='~Cost';           ProcPtr [2]:=DummyProc;
  402.     Line[3]:='~Revenue';        ProcPtr [3]:=DummyProc;
  403.     Line[4]:='~Taxes';          ProcPtr [4]:=DummyProc;
  404.     Line[5]:='~Insurance';      ProcPtr [5]:=DummyProc;
  405.     Line[6]:='~Update';         LineMode[6]:=ToSubMenu;
  406.                                 LinkNum [6]:=ord(UpdateMenu);
  407.     Line[7]:='~Years...';       LineMode[7]:=ToDataWndw;
  408.                                 LinkNum [7]:=ord(BytesDW);
  409.                                 ProcPtr [7]:=DummyProc;
  410.     MsgLineNum  := ord(MainML);
  411.     HelpWndwNum := ord(IRSmenuHW);
  412.     SaveMainMenu;
  413.  
  414.     GetMainMenu (QuitMenu);
  415.   { MenuMode:=ExecChoice; }     { This is the default }
  416.     Title:='~Quit';
  417.     Line[1]:='~Stay';
  418.     Line[2]:='~Quit';            ProcPtr[2] := SetQuit;
  419.     BackToDefault:=true;
  420.     MsgLineNum  := ord(MainML);
  421.     HelpWndwNum := ord(ExecChoiceHW);
  422.     SaveMainMenu;
  423.  
  424.   { ----------------------- Set up your SubMenus here: --------------------- }
  425.   { Careful! -- indexes to SubMenus must be numbered in order of level; i.e.,}
  426.   { ALL SubMenus first, ALL SubSubMenus second, ALL SubSubSubMenus, ... etc. }
  427.  
  428.     {$ifdef UseSubMenuCode }
  429.  
  430.     GetSubMenu (TiresMenu);
  431.     MenuMode:=SingleChoice;     SingleFlagLine:=5;
  432.     Line[1]:='~Brands';         LineMode[1]:=ToSubMenu;
  433.                                 LinkNum[1] :=ord(BrandsMenu);
  434.     Line[2]:='~Radials';
  435.     Line[3]:='~Knobbies';
  436.     Line[4]:='~Track';
  437.     Line[5]:='~Snow';
  438.     Line[6]:='~All-Weather';
  439.     Line[7]:='~4-ply';
  440.     MsgLineNum  := ord(SubML);
  441.     HelpWndwNum := ord(SingleChoiceHW);
  442.     SaveSubMenu;
  443.  
  444.     GetSubMenu (RadioMenu);
  445.     MenuMode:=MultipleChoice;
  446.     Line[1]:='~FM Stereo';      Flagged[1]:=true;
  447.     Line[2]:='~AM Radio';       Flagged[2]:=true;
  448.     Line[3]:='~Tape player';
  449.     Line[4]:='~Compact Disc';
  450.     DefaultLine := 4;
  451.     MsgLineNum  := ord(SubML);
  452.     HelpWndwNum := ord(MultipleChoiceHW);
  453.     SaveSubMenu;
  454.  
  455.     GetSubMenu (DateMenu);
  456.   { MenuMode:=ExecChoice; }     { This is the default }
  457.     Line[1]:='~Month...';       LineMode[1]:=ToDataWndw;
  458.                                 LinkNum [1]:=ord(MonthDW);
  459.                                 ProcPtr [1]:=DateMenu1;
  460.     Line[2]:='~Day...';         LineMode[2]:=ToDataWndw;
  461.                                 LinkNum [2]:=ord(DayDW);
  462.                                 ProcPtr [2]:=DateMenu2;
  463.     Line[3]:='~Year...';        LineMode[3]:=ToDataWndw;
  464.                                 LinkNum [3]:=ord(YearDW);
  465.                                 ProcPtr [3]:=DateMenu3;
  466.     BackToDefault := true;
  467.     MsgLineNum  := ord(SubML);
  468.     HelpWndwNum := ord(DateMenuHW);
  469.     SaveSubMenu;
  470.  
  471.     GetSubMenu (UpdateMenu);
  472.   { MenuMode:=ExecChoice; }     { This is the default }
  473.     Line[1]:='~1 process';                ProcPtr[1] := DummyProc;
  474.     Line[2]:='~2 process and pop';        ProcPtr[2] := ProcessThenPop;
  475.     Line[3]:='~3 pop and process';        ProcPtr[3] := PopThenProcess;
  476.     Line[4]:='~4 pop, process, pull';     ProcPtr[4] := PopProcessAndPull;
  477.     Line[5]:='~5 pop, pull to Years';     ProcPtr[5] := PopNumOfLevels;
  478.     Line[6]:='~6 pop, pull Radio';        ProcPtr[6] := PopToNewMenu;
  479.     DefaultLine := 4;
  480.     MsgLineNum  := ord(SubML);
  481.     HelpWndwNum := ord(UpdateMenuHW);
  482.     SaveSubMenu;
  483.  
  484.   { Here's a SubSubMenu: }
  485.     GetSubMenu (BrandsMenu);
  486.     MenuMode:=SingleChoice;     SingleFlagLine:=2;
  487.     Line[1]:='~Michelin';
  488.     Line[2]:='~General';
  489.     Line[3]:='~Firestone';
  490.     Line[4]:='~Bridgestone';
  491.     Line[5]:='~Rollingstone';
  492.     DefaultLine := 3;
  493.     MsgLineNum  := ord(SubML);
  494.     HelpWndwNum := ord(BrandsMenuHW);
  495.     SaveSubMenu;
  496.  
  497.     {$endif UseSubMenuCode }
  498.  
  499.   end;  { with TopMenu }
  500.  
  501.   { ---------------------- Set up your Help Windows here: ------------------ }
  502.   { HelpWndw[1] is reserved for the Work window. }
  503.   { HelpWndw[2] is reserved for the top menu. }
  504.  
  505.   {$ifdef UseHelpWndwCode }
  506.   HelpMsgLineNum := ord(HelpML);     { Standard message for a Help window }
  507.   SetHelpLines (WorkWndwHW      ,HLw1 ,HLwL);
  508.   SetHelpLines (TopLineHW       ,HLt1 ,HLtL);
  509.   SetHelpLines (FilesMenuHW     ,HLf1 ,HLfL);
  510.   SetHelpLines (DirMenuHW       ,HLdir1,HLdirL);
  511.   SetHelpLines (EnterDataMenuHW ,HLe1 ,HLeL);
  512.   SetHelpLines (BrandsMenuHW    ,HLb1 ,HLbL);
  513.   SetHelpLines (IRSmenuHW       ,HLi1 ,HLiL);
  514.   SetHelpLines (DateMenuHW      ,HLd1 ,HLdL);
  515.   SetHelpLines (UpdateMenuHW    ,HLu1 ,HLuL);
  516.   SetHelpLines (ExecChoiceHW    ,HLx1 ,HLxL);
  517.   SetHelpLines (SingleChoiceHW  ,HLs1 ,HLsL);
  518.   SetHelpLines (MultipleChoiceHW,HLm1 ,HLmL);
  519.   SetHelpLines (NumericHW       ,HLn1, HLnL);
  520.   SetHelpLines (TextHW          ,HLtx1,HLtxL);
  521.  
  522.   { ------------------ Set up your Help Lines here: ------------------------ }
  523.   HelpLine[ord(HLw1)]:='              WELCOME TO PULL70A.ZIP';
  524.   HelpLine[ord(HLw2)]:='To move the data entry highlight to the desired';
  525.   HelpLine[ord(HLw3)]:='field, use the following keys:';
  526.   HelpLine[ord(HLw4)]:='  '#27'/'#26'            - Left/Right';
  527.   HelpLine[ord(HLw5)]:='  '^X'/'^Y'            - Up/Down nearest cursor';
  528.   HelpLine[ord(HLw6)]:='  Home/Ctrl '#27'    - First one on the row.';
  529.   HelpLine[ord(HLw7)]:='  End /Ctrl '#26'    - Last one on the row';
  530.   HelpLine[ord(HLw8)]:='  PgUp/Ctrl-Home - First in sequence';
  531.   HelpLine[ord(HLw9)]:='  PgDn/Ctrl-End  - Last  in sequence';
  532.   HelpLine[ord(HLw10)]:='  Tab/Shift Tab  - next in sequence';
  533.   HelpLine[ord(HLw11)]:='Return key edits the current value.';
  534.   HelpLine[ord(HLwL)]:='Any non-extended key will begin editing the field.';
  535.  
  536.   HelpLine[ord(HLt1)]:='Move cursor and press return OR type a command';
  537.   HelpLine[ord(HLtL)]:='letter.  ESC to return to the Work window.';
  538.  
  539.   HelpLine[ord(HLb1)]:='Notice the number of levels for the menus.  This';
  540.   HelpLine[ord(HLb2)]:='menu is a "Single Choice" menu, but you can choose';
  541.   HelpLine[ord(HLb3)]:='from 1 of 3 menu modes:';
  542.   HelpLine[ord(HLb4)]:='  1. ExecChoice     - process only';
  543.   HelpLine[ord(HLb5)]:='  2. SingleChoice   - flag and process';
  544.   HelpLine[ord(HLbL)]:='  3. MultipleChoice - toggle flag and process';
  545.  
  546.   HelpLine[ord(HLf1)]:='This is a "Single Choice" menu, but there are ';
  547.   HelpLine[ord(HLf2)]:='5 of the 8 possible line modes used here:';
  548.   HelpLine[ord(HLf3)]:='* 1. Choice     - interact with other menu choices';
  549.   HelpLine[ord(HLf4)]:='  2. ExecOnly   - process but do not flag';
  550.   HelpLine[ord(HLf5)]:='  3. NoChoice   - temporarily disabled';
  551.   HelpLine[ord(HLf6)]:='* 4. Comment    - bypassed by highlight';
  552.   HelpLine[ord(HLf7)]:='* 5. Partition  - mid-menu border';
  553.   HelpLine[ord(HLf8)]:='* 6. ToDataWndw - pulls data entry window';
  554.   HelpLine[ord(HLf9)]:='  7. ToSubMenu  - pulls next submenu level';
  555.   HelpLine[ord(HLf10)]:='* 8. ToUserWndw - like ExecOnly plus menu symbol';
  556.   HelpLine[ord(HLfL)]:='Any combination of the seven works!';
  557.  
  558.   HelpLine[ord(HLe1)]:='Each data entry window can be tailored to any type';
  559.   HelpLine[ord(HLe2)]:='of data:';
  560.   HelpLine[ord(HLe3)]:='  1. Byte     - 0..255';
  561.   HelpLine[ord(HLe4)]:='  2. Word     - 0..65535';
  562.   HelpLine[ord(HLe5)]:='  3. ShortInt - -128..127';
  563.   HelpLine[ord(HLe6)]:='  4. Integer  - -32768..32767';
  564.   HelpLine[ord(HLe7)]:='  5. LongInt  - -2147483647..2147483647';
  565.   HelpLine[ord(HLe8)]:='  6. Real     - any format';
  566.   HelpLine[ord(HLe9)]:='  7. UserNums - user defined numbers, like hex';
  567.   HelpLine[ord(HLe10)]:='  8. Char    - one character';
  568.   HelpLine[ord(HLe11)]:='  9. String  - any length';
  569.   HelpLine[ord(HLe12)]:='Data entry will check validity, range, and user-';
  570.   HelpLine[ord(HLe13)]:='defined limits.   Sets will limit data entry to';
  571.   HelpLine[ord(HLe14)]:='valid characters only.  Field length and labels';
  572.   HelpLine[ord(HLeL)]:='are also user-defined.';
  573.  
  574.   HelpLine[ord(HLi1)]:='This is an "Execute Choice" menu.  But sure to see';
  575.   HelpLine[ord(HLi2)]:='the example of sequential data entry on "Date" and';
  576.   HelpLine[ord(HLiL)]:='menu control on "Update".';
  577.  
  578.   HelpLine[ord(HLd1)]:='This is an "Execute Choice" menu, but there are no';
  579.   HelpLine[ord(HLd2)]:='"choice" lines.  Instead, the lines are all data';
  580.   HelpLine[ord(HLd3)]:='entry lines that have been made to allow either';
  581.   HelpLine[ord(HLdL)]:='random or sequential access.  Start with "Month".';
  582.  
  583.   HelpLine[ord(HLu1)]:='This is an "Execute Choice" menu.  This one will';
  584.   HelpLine[ord(HLu2)]:='show you a few of the possibilities of actually';
  585.   HelpLine[ord(HLuL)]:='controlling the menus themselves.';
  586.  
  587.   HelpLine[ord(HLx1)]:='        This is an "Execute Choice" menu.';
  588.   HelpLine[ord(HLx2)]:='         Notice that there are no flags.';
  589.   HelpLine[ord(HLxL)]:='   "'^P'" means linked SubMenu; "..." - DataWndw.';
  590.  
  591.   HelpLine[ord(HLs1)]:='         This is a "Single Choice" menu.';
  592.   HelpLine[ord(HLs2)]:='          Notice there''s only one flag.';
  593.   HelpLine[ord(HLsL)]:='   "'^P'" means linked SubMenu; "..." - DataWndw.';
  594.  
  595.   HelpLine[ord(HLm1)]:='        This is a "Multiple Choice" menu.';
  596.   HelpLine[ord(HLm2)]:='              Notice several flags.';
  597.   HelpLine[ord(HLmL)]:='   "'^P'" means linked SubMenu; "..." - DataWndw.';
  598.  
  599.   HelpLine[ord(HLdir1)]:='Directory can optionally default to a closely';
  600.   HelpLine[ord(HLdir2)]:='matching name, if any, in the file name entry';
  601.   HelpLine[ord(HLdir3)]:='field.  Pressing CR replaces the name.  Cursor and';
  602.   HelpLine[ord(HLdir4)]:='letter keys move the highlight:';
  603.   HelpLine[ord(HLdir5)]:='  Letter key  - find name with same first letter';
  604.   HelpLine[ord(HLdir6)]:='  '^X'/'^Y'         - move up/down';
  605.   HelpLine[ord(HLdir7)]:='  Home/End    - move to upper/lower file name';
  606.   HelpLine[ord(HLdir8)]:='  PgUp/PgDn   - move up/down a page';
  607.   HelpLine[ord(HLdir9)]:='  ^Home/^End  - move to top/bottom file name';
  608.   HelpLine[ord(HLdirL)]:='  ^PgUp/^PgDn - move to top/bottom page';
  609.  
  610.   HelpLine[ord(HLn1)]:='This is a data entry field for numbers. Only valid';
  611.   HelpLine[ord(HLn2)]:='numbers and symbols can be typed.  Full editing';
  612.   HelpLine[ord(HLn3)]:='capability:';
  613.   HelpLine[ord(HLn4)]:='  1. WordStar keys: ^A,^S,^D,^F,^G,^H,^R,^Y,^U';
  614.   HelpLine[ord(HLn5)]:='  2. Cursor keys:   Home/End, Left/Right Arrow,';
  615.   HelpLine[ord(HLn6)]:='     Ctrl-Left/Right Arrow, and Ins/Del.';
  616.   HelpLine[ord(HLnL)]:='  3. Use ^R or ^U to restore original data.';
  617.  
  618.   HelpLine[ord(HLtx1)]:='This is a data entry field for text.  With the use';
  619.   HelpLine[ord(HLtx2)]:='of sets, only valid letters can be typed.  Full';
  620.   HelpLine[ord(HLtx3)]:='editing capability:';
  621.   HelpLine[ord(HLtx4)]:='  1. WordStar keys: ^A,^S,^D,^F,^G,^H,^R,^Y,^U';
  622.   HelpLine[ord(HLtx5)]:='  2. Cursor keys:   Home/End, Left/Right Arrow,';
  623.   HelpLine[ord(HLtx6)]:='     Ctrl-Left/Right Arrow, and Ins/Del.';
  624.   HelpLine[ord(HLtxL)]:='  3. Use ^R or ^U to restore original data.';
  625.   {$endif UseHelpWndwCode }
  626.  
  627.  
  628.   { ------------------ Set up your Message Lines here: --------------------- }
  629.   { Concatenations here allow source to print on 80 col printer.             }
  630.   { All messages up to HelpMsg are reserved.                                 }
  631.   { "~" toggles highlight attribute. }
  632.  
  633.   {$ifdef UseMsgLineCode }
  634.   MsgLine[ord(WorkML)]:=' ~F1~-help  ~F2~-pull  ~F10~-top';
  635.   MsgLine[ord(TopML)] :=' ~F1~-help  ~F2~-pop   ~LTR~-cmd  ~ESC~-return  '+
  636.                         '        ~'^[^Z'~ hilight            ~CR~-select';
  637.   MsgLine[ord(AltML)] :=' ~Alt-F~-Files  ~Alt-D~-Directory  ~Alt-P~-Path '+
  638.                         '                           ~Alt-X~-Exit';
  639.   MsgLine[ord(MainML)]:=' ~F1~-help  ~F2~-pop   ~LTR~-cmd  ~ESC~-return  '+
  640.                         '        ~'^[^Z'~ menus  ~'^X^Y'~-hilight  ~CR~-select';
  641.   MsgLine[ord(SubML)] :=' ~F1~-help  ~F2~-pop   ~LTR~-cmd  ~ESC~-return  '+
  642.                         '                  ~'^X^Y'~-hilight  ~CR~-select';
  643.   MsgLine[ord(DW_ML)] :=' ~F1~-help  ~F2~-pop   ~F10~-top  ~ESC~-restore '+
  644.                         '                              ~CR~-enter';
  645.   MsgLine[ord(DE_ML)] :=' ~F1~-help  ~F2~-pull  ~F10~-top  ~ESC~-restore '+
  646.                         '                              ~CR~-enter';
  647.   MsgLine[ord(SeqML)] :=' ~F1~-help  ~F2~-pull  ~F10~-top              '+
  648.                         '                              ~CR~-edit';
  649.   MsgLine[ord(HelpML)]:=' ~F1~-return         ~LTR~-cmd  ~ESC~-return';
  650.   MsgLine[ord(ProcML)]:=' Processing ...';
  651.   MsgLine[ord(DirML)] :=' ~F1~-help  ~F2~-pop   ~F10~-top  ~ESC~-return  '+
  652.                         '              ~LTR/'^X^Y'~-hilight  ~CR~-select';
  653.   {$endif UseMsgLineCode }
  654.  
  655. end;  { procedure GetUserPullStats }
  656.  
  657. { =========================== GetOverrideStats ============================= }
  658. { You can OVERRIDE the automatic Colors, Sizes, and Locations here.          }
  659. { -------------------------------------------------------------------------- }
  660.  
  661. procedure GetOverrideStats;
  662. begin
  663.   with DirectoryMenu do
  664.     begin
  665.       Title   := 'Directory';       { Optional }
  666.       MenuLines := CRTrows-7;
  667.       Row  := 4;
  668.       Rows := CRTrows-5;
  669.       with MainMenu^[ord(FilesMenu)] do
  670.         DirectoryMenu.Col := Col+Cols-2;
  671.       Cols   := 16;
  672.       Battr  := BrownBG;
  673.       Wattr  := BrownBG;
  674.       if QvideoMode=Mono then
  675.            Hattr := LightGrayBG
  676.       else Hattr := Yellow;
  677.       Border := SubMenuBrdr;
  678.       LinkDir := Right;
  679.       MsgLineNum  := ord(DirML);
  680.       HelpWndwNum := ord(DirMenuHW);
  681.     end;
  682.  
  683.   {$ifdef UseSubMenuCode }
  684.   with SubMenu^[ord(BrandsMenu)] do
  685.     begin
  686.       Wattr := Black+BrownBG;
  687.       Battr := Black+BrownBG;
  688.       if QVideoMode<>Mono then
  689.         begin
  690.           Hattr := Yellow+BlackBG;
  691.           Lattr := Yellow+BrownBG;
  692.         end;
  693.     end;
  694.   {$endif UseSubMenuCode }
  695.  
  696. end;
  697.  
  698. { ========================= CHECK GLOBAL KEYS ============================== }
  699. { This procedure gives you the option to add global keys similar to IDE such }
  700. { as Alt-R or Alt-F3.  This is for extended keys only.                       }
  701. { -------------------------------------------------------------------------- }
  702.  
  703. const
  704.   AltF    = #33;    { Files menu }
  705.   AltC    = #46;    { Colors menu }
  706.   AltA    = #30;    { AutoParts menu }
  707.   AltE    = #18;    { EnterData menu }
  708.   AltO    = #24;    { Options menu }
  709.   AltU    = #22;    { Utilities menu }
  710.   AltI    = #23;    { IRSaccounting menu }
  711.   AltQ    = #16;    { Quit menu }
  712.   AltD    = #32;    { Directory menu }
  713.   AltP    = #25;    { Path Data entry }
  714.   AltX    = #45;    { Immediately exit program }
  715.   Alt1    = #120;   { For Work Window 1 }
  716.   Alt2    = #121;   { For Work Window 2 }
  717.  
  718. procedure SetWorkWndw (WN: WindowNames);
  719. begin
  720.   PullDown        := false;
  721.   PopToWorkWndw   := true;
  722.   TopWorkWndwName := WN;
  723. end;
  724.  
  725. { -- Any of the keys can be modified. PopKey and TopKey1 are defined in }
  726. { -- PullVars.inc. }
  727. procedure CheckGlobalKeys;
  728. begin
  729.   PullDown := true;
  730.   case Key of
  731.     PopKey:  begin PullDown:=false; PopToWorkWndw:=true; end; { F2 }
  732.     TopKey1: PopToTop:=true;                                  { F10 }
  733.     AltF:    SetCmdSeq ('F');
  734.     AltC:    SetCmdSeq ('C');
  735.     AltA:    SetCmdSeq ('A');
  736.     AltE:    SetCmdSeq ('E');
  737.     AltO:    SetCmdSeq ('O');
  738.     AltU:    SetCmdSeq ('U');
  739.     AltI:    SetCmdSeq ('I');
  740.     AltQ:    SetCmdSeq ('Q');
  741.     AltD:    SetCmdSeq ('FD');
  742.     AltP:    SetCmdSeq ('FP');
  743.     AltX:    SetQuit;
  744.   else
  745.     PullDown := false;
  746.   end
  747. end;
  748.  
  749. BEGIN
  750.   CallGetUserPullStats := GetUserPullStats;
  751.   CallGetOverrideStats := GetOverrideStats;
  752.   CallCheckGlobalKeys  := CheckGlobalKeys;
  753. END.
  754.